%%% Copyright [heng] [litaocheng@gmail.com] 
%%% Licensed under the Apache License, Version 2.0 (the "License");
%%% you may not use this file except in compliance with the License. 
%%% You may obtain a copy of the License at 
%%%    http://www.apache.org/licenses/LICENSE-2.0 
%%% Unless required by applicable law or agreed to in writing, 
%%% software distributed under the License is distributed on an "AS IS" BASIS, 
%%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
%%% See the License for the specific language governing permissions and 
%%% limitations under the License. 

%%% the job process, manager a single job
-module(hengm_job).
-author('litaocheng@gmail.com').
-vsn('0.1').
-include("heng_master.hrl").

-export([id/0, config/0, config/1]).
-export([set_map/2, set_reduce/2]).

-export([map_info/0, map_info/1]).
-export([reduce_info/0, reduce_info/1]).

-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
                            terminate/2, code_change/3]).

-record(state,
            {
                job :: job(),
                
                maplist = [],
                mapset,
                reducelist = []
                reduce_set                
            }).


-define(SERVER, ?MODULE).

%% @doc get the job id
id() ->
    gen_server:call(?SERVER, {id}).

%% @doc get the job config info
config(Key) ->
    Config = gen_server:call(?SERVER, config),
    lists:keysearch(Key, 1, Config).        

%% @doc get all the config info about the job
config() ->
    gen_server:call(?SERVER, config).

%% @doc alloc a map process 
set_map(Index, Pid) ->
    gen_server:call(?SERVER, {set_map, Index, Pid}).


%% gen_server callbacks
init([Job]) ->    
    {ok, []}.

handle_call(_Msg, _From, State) ->
    {noreply, State}.

handle_cast(_Msg, State) ->
    {noreply, State}.

handle_info(_Info, State) ->
    {noreply, State}.

terminate(_Reason, _State) ->
    ok.

code_change(_Old, State, _Extra) ->
    {ok, State}.
